# Description

Исследуя исполняемые файлы можно прийти к выводу, что файл с именем **[password_manager](https://github.com/InformationSecurityCenter/RDG/blob/main/Services/distributed_password_manager/password_manager)** является исполняемым.  
Для его запуска достаточно использовать команду **./password_manager**.  

Анализируя его содержимое, можно встретить такие строчки:  
 ![image](https://user-images.githubusercontent.com/103483328/195216122-92c2cd30-3c0e-46e5-8b13-a369e1e6e279.png)

Очевидно, что данный файл собран при помощи «PyInstaller».  
И используя утилиту [pyinstxtractor](https://github.com/extremecoders-re/pyinstxtractor) можно легко разобрать данный файл.
Все исполняемые файлы представлены в формате [.pyc](https://docs.python.org/3/library/py_compile.html).
Подробная инструкция по разбору таких файлов представлена [тут](https://medium.com/cassandra-cryptoassets/how-to-decompile-compiled-pyc-python-files-50e5f45d1edb):  
Из важного, разбирая dll библиотеки самого python, можно прийти к выводу, что при сборке файла “password_manager” использовался python 3.7.  
Полностью разобрав исходный код, в глаза бросается функция **Receive** модуля **Connector**.  
![image](https://user-images.githubusercontent.com/103483328/195216142-ccbc39c3-9636-4e30-977b-82feaaa0f54f.png)
   
Очевидно, что разработчиком данного приложения была добавлена незадокументированная возможность вклиниться в процесс подключения.  
Рассматривая файлы лежащие рядом с приложением видно, что флаги хранятся в файле **[db/passwords.json](https://github.com/InformationSecurityCenter/RDG/blob/main/Services/distributed_password_manager/db/passwords.json)**. Так же, можно заметить, что все флаги в данном файле отсортированны в лексикографическом порядке.
В файле **[exploit](./exploit.py)** приведён код эксплоита созданный командой **0t_v1nt4**. Запуская его раз в раунд и сравнивая получаемые данные, можно получать свежие флаги, отправляемые командам.   
  
**PS:**  
В процессе работы сервиса, можно заметить, что старые флаги не удаляются и файл с ними сильно разрастается в размере. В процессе отправки файл c флагами отправляется не полностью из-за чего чекер не может найти определённый флаг. Это происходит, из-за того, что в отправке используется функция **send** и из-за ошибок сети файл не успевает загрузиться из-за таймаута чекера:
  
![image](https://user-images.githubusercontent.com/103483328/195216090-5b83afd0-ec7d-4361-8254-e42235518a7b.png)

Данная ошибка исправляется заменой на функцию **sendall**
  
![image](https://user-images.githubusercontent.com/103483328/195216103-b406744a-8333-4440-b07f-9ec1eb4118e7.png)
